﻿package planningsbord_v4.model {
	 	
	import flash.net.*;
	import flash.events.Event;
	import flash.events.EventDispatcher;
		
	public class Planningsbord extends EventDispatcher{
		
		private var planningen:Array;
		private var patienten:Array;
		private var verzorgenden:Array;
		
		private var xml: XML = new XML();
		private var loader:URLLoader = new URLLoader();
		
		public function Planningsbord():void {
			patienten = new Array();
			verzorgenden = new Array();
			planningen = new Array();
			
			loader.addEventListener(Event.COMPLETE, onLoaded);
			loader.load(new URLRequest("database.xml"));
		}
		
		private function onLoaded(e:Event) : void{
			xml = new XML(e.target.data);
			
			// Patienten laden uit xml bestand
			trace("De Patienten laden \n");
			var il:XMLList = xml.patienten.patient;
			for(var i=0; i<il.length(); i++){
				addPatient(il.naam.text()[i]);
				trace("patient: "+il.naam.text()[i]);
			}
			
			// Verzorgenden laden uit xml bestand
			trace("De Verzorgenden laden \n");
			il=xml.verzorgenden.verzorgende;
			for(i=0; i<il.length(); i++){
				addVerzorgende(il.naam.text()[i]);
				trace("verzorgende: "+il.naam.text()[i]);
			}
			
			//Nieuwe Planning maken
			nieuwePlanning( new Date() );
			
			// PlanningsKaarten laden uit xml bestand
			trace("De planning laden \n");
			il=xml.planning.patientenkaarten.patientenkaart;
			for(i=0;i<il.length();i++) {
				var naamPatient:String = il.patient.text()[i];
				var naamVerzorgende:String = il.patient.text()[i];
				
				trace("PatientenKaart: "  +il.patient.text()[i]+ "->" +il.verzorgende.text()[i] );

				var patientenKaart:PatientenKaart;
				// Controlleer of de patient bestaat
				if( bestaatPatient(naamPatient) ) {
					//zo ja maak een nieuwe patientenkaart
					patientenKaart = new PatientenKaart( getPatient(naamPatient) );
					planningen[0].addPatientenKaart( patientenKaart );
				}
				else {
					//zo nee maak de patient aan en maak de planningskaart
					addPatient( naamPatient );
					patientenKaart = new PatientenKaart( getPatient(naamPatient) );
					planningen[0].addPatientenKaart( patientenKaart );
				}
			}		
			
			// stuur een event dat het model geladen is
			dispatchEvent(new Event("modelLoaded",true));
		}
		
		
		
		public function getPatienten():Array {
			return patienten;
		}
		public function getVerzorgenden():Array {
			return verzorgenden;
		}
		public function addPatient(deNaam:String):void {
			patienten.push( (new Patient(deNaam)) );
		}
		public function addVerzorgende( deNaam:String ):void {
			verzorgenden.push( (new Verzorgende(deNaam)) );
		}
		public function getVerzorgende( deNaam:String ):Verzorgende {
			for(var i=0;i<verzorgenden.length;i++) {
				if( deNaam == verzorgenden[i].getNaam() ) {
					return verzorgenden[i];
				}
			}
			return null;
		}
		public function getPatient( deNaam:String ):Patient {
			for(var i=0;i<patienten.length;i++) {
				if( deNaam == patienten[i].getNaam() ) {
					return patienten[i];
				}
			}
			return null;
		}
		public function getPlanning( deDatum:Date ):Planning {
			for(var i=0;i<planningen.length;i++) {
				if( planningen[i].getDatum() == deDatum ) {
					return planningen[i];
				}
			}
			return null;
		}
		public function getPlanningen():Array {
			return planningen;
		}
		public function nieuwePlanning( deDatum:Date ):void {
			var nwPlanning:Planning = new Planning(deDatum);
			planningen.push(nwPlanning);
		}
		
		public function bestaatVerzorgende(deNaam:String):Boolean {
			var gevonden:Boolean = false;
			for(var i=0; i<verzorgenden.length; i++) {
				if( verzorgenden[i].getNaam() == deNaam ) {
					gevonden = true;
					break;
				}
			}
			return gevonden;
		}
		public function bestaatPatient(deNaam:String):Boolean {
			var gevonden:Boolean = false;
			for(var i=0; i<patienten.length; i++) {
				if( patienten[i].getNaam() == deNaam ) {
					gevonden = true;
					break;
				}
			}
			return gevonden;
		}
	}
}
